package com.example.site.controller;

import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.util.SaResult;
import com.example.site.service.UserService;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.Map;

@RestController
@RequestMapping("/api/admin")
public class AdminController {
    @Resource
    private UserService userService;

    /**
     * @param data
     * @return
     * @deprecated 登录
     */
    @PostMapping("/login")
    public SaResult login(@RequestBody Map<String, String> data) {
        return userService.login(data.get("username"), data.get("password"));
    }
    //它被注解为@PostMapping("/login")，表示可以通过HTTP POST请求访问/login路径，并且需要请求体中包含username和password两个参数。
//该方法调用了userService对象中的login方法，该方法会对传递过来的用户信息进行验证，如果验证成功，则返回一个SaResult对象，表示登录成功，并携带一些额外的登录信息（如Token或者其他用户信息）。如果验证失败，则返回一个SaResult对象，表示登录失败，其中包含相关的错误信息。
    /**
     * @return
     * @deprecated 退出登录
     */
    @SaCheckLogin
    @PostMapping("/logout")
    public SaResult logout() {
        StpUtil.logout();
        return SaResult.ok();
    }
//它被注解为@PostMapping("/logout")，表示可以通过HTTP POST请求访问/logout路径。
//这段代码是一个使用了Sa-Token框架的Java类中的一个方法
//该方法首先使用@SaCheckLogin注解进行用户登录检查，并通过StpUtil.logout()方法来清除当前用户的Token和会话信息，表示用户已经退出登录。然后，返回一个SaResult对象，表示注销成功。
    /**
     * @return
     * @deprecated 获取用户信息
     */
    @SaCheckLogin
    @GetMapping("/userinfo")
    public SaResult userinfo() {
        return userService.fetchUserinfo();
    }
    //它被注解为@GetMapping("/userinfo")，表示可以通过HTTP GET请求访问/userinfo路径。
    //这段代码是一个使用了Sa-Token框架的Java类中的一个方法
    //该方法首先使用@SaCheckLogin注解进行用户登录检查，并通过调用userService对象中的fetchUserinfo方法来获取当前登录用户的信息。然后，将该用户信息封装在SaResult对象中，并返回给客户端。

    /**
     * @param data
     * @return
     * @deprecated 创建前台用户
     */
    @SaCheckLogin
    @PostMapping("/create-front-user")
    public SaResult createFrontUser(@RequestBody Map<String, String> data) {
        return userService.createFrontUser(data);
    }
//该方法首先使用@SaCheckLogin注解进行用户登录检查，确保当前用户已经登录，然后通过调用userService对象中的createFrontUser方法来创建一个前台用户，并将其相关信息写入到数据库中。
// 最后，将操作结果封装在SaResult对象中，并返回给客户端。
    /**
     * @param data
     * @return
     * @deprecated 管理员修改前台用户信息
     */
    @SaCheckLogin
    @PostMapping("/edit-front-user")
    public SaResult adminEditUserinfo(@RequestBody Map<String, String> data) {
        return userService.adminEditUserinfo(data);
    }
//该方法首先使用@SaCheckLogin注解进行用户登录检查，确保当前用户已经登录，然后通过调用userService对象中的adminEditUserinfo方法来修改指定前台用户的相关信息。
// 最后，将操作结果封装在SaResult对象中，并返回给客户端。
    /**
     * @param data
     * @return
     * @deprecated 创建用户
     */
    @SaCheckLogin
    @PostMapping("/create-user")
    public SaResult createUser(@RequestBody Map<String, String> data) {
        return userService.createUser(data);
    }

    /**
     * @param data
     * @return
     * @deprecated 获取用户列表
     */
    @SaCheckLogin
    @GetMapping("/list")
    public SaResult getList(@RequestParam Map<String, String> data) {
        return userService.getList(data);
    }

}
